#ifndef RTCWAKE_HPP
#define RTCWAKE_HPP

#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <thread>
#include <chrono>
#include <cstdlib>

#ifdef _WIN32
#include <windows.h>
#include <powrprof.h>
#pragma comment(lib, "powrprof.lib")
#else
#include <unistd.h>
#include <sys/reboot.h>
#endif

class RtcWake {
public:
    enum Mode {
        DISABLE = 0,   // 禁用唤醒定时器
        ENABLE = 1,    // 启用唤醒定时器
        QUERY = 2      // 查询唤醒定时器状态
    };
    
    enum SuspendMode {
        SUSPEND_NONE = 0,
        SUSPEND_STANDBY = 1,  // 待机
        SUSPEND_HIBERNATE = 2 // 休眠
    };
    
    RtcWake();
    ~RtcWake();
    
    // 主功能函数
    int execute(int argc, char* argv[]);
    
    // 命令行解析
    bool parseArguments(int argc, char* argv[]);
    
    // 显示帮助信息
    void showHelp();
    void showVersion();
    
    // 核心功能
    int setWakeupTimer();
    int queryWakeupTimer();
    int disableWakeupTimer();
    int performSuspend();
    
private:
    // 命令行参数
    Mode mode;
    SuspendMode suspendMode;
    std::string device;
    time_t wakeupTime;
    bool verbose;
    bool dryRun;
    bool showHelpFlag;
    bool showVersionFlag;
    
    // 工具函数
    time_t parseTimeString(const std::string& timeStr);
    std::string timeToString(time_t time);
    void logMessage(const std::string& message);
    bool isRoot();
};

#endif